from gmssl import sm4
import hashlib

# 使用给定的字符串密钥生成 16 字节的密钥
def generate_key_from_string(key_string):
    # 使用 SHA-256 哈希算法生成 32 字节的哈希值
    hashed_key = hashlib.sha256(key_string.encode('utf-8')).digest()
    # 取前 16 字节作为密钥
    return hashed_key[:16]

# 使用 SM4 加密密码，并将结果转换为 16 进制字符串
def encrypt_password(password):
    key = generate_key_from_string("hellokitty")  # 使用默认的密钥
    sm4_crypt = sm4.CryptSM4()
    sm4_crypt.set_key(key, sm4.SM4_ENCRYPT)
    encrypted_password = sm4_crypt.crypt_ecb(password.encode('utf-8'))
    return encrypted_password.hex()  # 将字节数据转换为 16 进制字符串

# 将 16 进制字符串转换为字节数据，并使用 SM4 解密密码
def decrypt_password(encrypted_password_hex):
    key = generate_key_from_string("hellokitty")  # 使用默认的密钥
    encrypted_password = bytes.fromhex(encrypted_password_hex)  # 将 16 进制字符串转换为字节数据
    sm4_crypt = sm4.CryptSM4()
    sm4_crypt.set_key(key, sm4.SM4_DECRYPT)
    decrypted_password = sm4_crypt.crypt_ecb(encrypted_password)
    return decrypted_password.decode('utf-8')

if __name__ == '__main__':
    # 示例数据
    password = "admin"

    # 加密密码
    encrypted_password_hex = encrypt_password(password)
    print(f"Encrypted Password (Hex): {encrypted_password_hex}")

    # 解密密码
    decrypted_password = decrypt_password(encrypted_password_hex)
    print(f"Decrypted Password: {decrypted_password}")
